#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/9/6 15:10
# @USER    : Shengji He
# @File    : DecodeWays.py
# @Software: PyCharm
# @Version  : Python-
# @TASK:

class Solution:
    def numDecodings(self, s: str) -> int:
        """
        A message containing letters from A-Z is being encoded to numbers using the following mapping:

        'A' -> 1
        'B' -> 2
        ...
        'Z' -> 26
        Given a non-empty string containing only digits, determine the total number of ways to decode it.

        Example 1:
            Input: "12"
            Output: 2
            Explanation: It could be decoded as "AB" (1 2) or "L" (12).
        Example 2:
            Input: "226"
            Output: 3
            Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

        :param s:
        :return:
        """
        if s[0] == '0':
            return 0
        pre = 1
        curr = 1
        for i in range(1, len(s)):
            tmp = curr
            if s[i] == '0':
                if s[i - 1] == '1' or s[i - 1] == '2':
                    curr = pre
                else:
                    return 0
            elif s[i - 1] == '1' or (s[i - 1] == '2' and '1' <= s[i] <= '6'):
                curr = curr + pre
            pre = tmp
        return curr


if __name__ == '__main__':
    S = Solution()
    # s = '0'
    s = '226'
    # s = '12'
    print(S.numDecodings(s))
    print('done')
